/**
 * @file vuex
 *
 * @author fanxingguang@baidu.com
 * 2017年7月14日
 */

import Vue from 'vue';
import Vuex from 'vuex';
import {parseQuery} from '@/common/util';
Vue.use(Vuex);
const env = parseQuery(location.href);
// 从href解析到的内容如下
// let env = {
//     sessionId: '通话sessionId',
//     acctId: '账户Id',
//     contactPhone: '账户联系人电话',
//     ivrType: 'ivr类型,呼出为空；呼入为：1：账户续费 2：账户发票 3：账户加V年审 4：信息修改 0：其它',
//     callId: '通话callId',
//     callDir: '呼出呼入标识',
//     ani: '呼出呼入电话',
//     dnis: '呼出呼入电话',
//     serviceList: '技能组'
// };

// 增加联系人姓名账户名称和公司名称
env.contactName = '';
env.acctName = '';
env.corporateName = '';
const state = {
    // 全局环境变量，从落地页的url中获取
    env,
    // 通话状态 0 通话前 1 通话中 2 通话结束
    callStatus: 0,
    // 通话前画像被激活索引，-1代表没有被激活
    portraitActiveBeforeCall: -1,

    /**
     * 工单主题进行拆分，默认工单主题和用户后续手动添加的工单主题
     * 根据env.ivrType判断，如果是呼出不显示默认主题,只显示待办主题
     */
    // 用户待办工单
    todoTicketTopicList: [],
    // 当前用户所有工单主题
    ticketTopicList: [],
    // 已经编辑过的工单id
    editedTicketTopicIds: [],

    // 话术主题ID列表，保存顺序
    talkTopicIdList: [],
    talkTopicNameList: [],
    // 话术主题map防止重复，保存数据本体
    talkTopicMap: {},

    // 当前显示的第一张卡片的索引值
    firstCardIndex: 0,
    // 锁定卡片索引，-1 代表没有卡片锁定
    lockedCardIndex: -1
};
const mutations = {
    // 设置通话状态
    setCallStatus(state, payload) {
        state.callStatus = +payload;
    },
    // 设置通话前激活卡片索引
    setPortraitActiveBeforeCall(state, payload) {
        state.portraitActiveBeforeCall = payload;
    },
    // 增加已编辑过的工单主题id
    addEditedTicketTopicIds(state, payload) {
        state.editedTicketTopicIds.push(payload);
    },

    /**
     * 初始化工单主题
     *
     * @param {Object} state   vuex state对象
     * @param {Array}  payload 默认工单主题列表
     */
    initTicketTopic(state, payload) {
        let isCallout = state.env.ivrType === '';
        payload.forEach(item => {
            item.hit = false;
            state.ticketTopicList.push(item);
            if (!isCallout) {
                state.todoTicketTopicList.push(item);
            }
        });
    },

    /**
     * 手动添加工单主题
     *
     * @param {Object} state   vuex state对象
     * @param {Object} payload 工单主题对象
     */
    addTicketTopic(state, payload) {
        payload.hit = false;
        state.ticketTopicList.push(payload);
        state.todoTicketTopicList.push(payload);
    },
    // 删除工单主题
    delTicketTopic(state, payload) {
        if (!Array.isArray(payload)) {
            payload = [payload];
        }
        state.todoTicketTopicList.forEach((item, index) => {
            if (item.sceneId === payload[0].sceneId) {
                state.todoTicketTopicList.splice(index, 1);
            }
        });
    },
    // 新增话术主题
    addTalkTopic(state, payload) {
        let newCardCount = 0;
        let payloadId = payload.id;
        payload.forEach(item => {
            let name = item.topicName;
            let id = item.topicId + '-' + payloadId;
            if (state.talkTopicMap[id] === undefined) {
                newCardCount++;
                state.talkTopicIdList.push(id);
                state.talkTopicNameList.unshift(name);
            }
            state.talkTopicMap[id] = item;
        });
        if (newCardCount > 0) {
            state.firstCardIndex = state.talkTopicIdList.length - 1;
        }
    },
    // 设置显示的第一张卡片的索引
    setFirstCardIndex(state, payload) {
        // 无卡片锁定才可更改
        if (state.lockedCardIndex === -1) {
            state.firstCardIndex = payload;
        }
    },
    // 设置锁定卡片索引
    setLockedCardIndex(state, payload) {
        state.lockedCardIndex = payload;
    },
    // 扩展环境变量的值
    assignEnv(state, payload) {
        Object.assign(state.env, payload);
    }
};
const actions = {};
export default new Vuex.Store({
    state,
    mutations,
    actions,
    getters: {
        callStatus(state) {
            return state.callStatus;
        }
    }
});
